/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package LogicaNegocio.Controlador;

import AccesoDatos.Persistencia.Manager.ManagerUsuario;
import GUI.Bibliotecario.AdminUsuarios.PanelActualizarUsuario;
import LogicaNegocio.Usuarios.Docente;
import LogicaNegocio.Usuarios.Estudiante;
import LogicaNegocio.Usuarios.Usuario;
import LogicaNegocio.Validacion.VUsuario;
import javax.swing.JOptionPane;

/**
 * Esta clase en java permite el control de eventos
 * para la actualizacion de usuarios en el sistema.
 *
 * @author sebaxtian
 * Archivo: ControlActualizarUsuario.java
 * @version 1.0
 * Fecha: lun may 10 21:07:20 COT 2010
 */



public class ControlActualizarUsuario {

    //Atributos de clase
    private PanelActualizarUsuario panelActualizar;
    private ManagerUsuario gestorUsuario;
    private Usuario usuario;
    private boolean encontrado;

    public ControlActualizarUsuario(PanelActualizarUsuario panelActualizar) {
        this.panelActualizar = panelActualizar;
        gestorUsuario = new ManagerUsuario();
        encontrado = false;
    }

    public void buscarUsuario() {
        try {
            int cedulaUsuario = Integer.parseInt(panelActualizar.textFieldBuscar.getText());
            //obtiene el usuario registrado del sistema
            usuario = gestorUsuario.obtenerUsuario(cedulaUsuario);
            //los usuarios tiene un perfil
            Docente docente = gestorUsuario.obtenerDocente(usuario.getIdentificacionUsuario());
            Estudiante estudiante = gestorUsuario.obtenerEstudiante(usuario.getIdentificacionUsuario());
            if (docente != null) {
                mostrarDatosDocente(docente);
                usuario = docente;
            }
            if (estudiante != null) {
                mostrarDatosEstudiante(estudiante);
                usuario = estudiante;
            }
            encontrado = true;
        } catch(NumberFormatException ex) {
            JOptionPane.showMessageDialog(panelActualizar, "El campo numero de cedula solo debe contener un valor numerico", "Numero Cedula", JOptionPane.ERROR_MESSAGE);
            encontrado = false;
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(panelActualizar, ex.getMessage(), "Error Buscar", JOptionPane.INFORMATION_MESSAGE);
            encontrado = false;
        }
    }

    public void actualizarUsuario() {
        if(panelActualizar.radioDocenteNuevo.isSelected() && encontrado){
            actualizarDocente();
            encontrado = false;
        }
        if(panelActualizar.radioEstudianteNuevo.isSelected() && encontrado){
            actualizarEstudiante();
            encontrado = false;
        }
    }

    private void actualizarDocente() {
        try {
            Docente docente = (Docente) usuario;
            int cedulaUsuario = Integer.parseInt(panelActualizar.textFieldCedula.getText());
            //actualiza los atributos del docente
            docente.setActivo(panelActualizar.checkActivoNuevo.isSelected());
            docente.setAreasInteres(panelActualizar.textAreaInteresesNuevo.getText());
            docente.setDependencia(panelActualizar.textFieldDependenciaNueva.getText());
            docente.setDireccion(panelActualizar.textFieldDireccionNuevo.getText());
            docente.setEmail(panelActualizar.textFieldEmailNuevo.getText());
            docente.setIdentificacionUsuario(Integer.parseInt(panelActualizar.textFieldCedulaNueva.getText()));
            docente.setPrimerApellido(panelActualizar.textFieldPrimerApellidoNuevo.getText());
            docente.setPrimerNombre(panelActualizar.textFieldPrimerNombreNuevo.getText());
            docente.setSegundoApellido(panelActualizar.textFieldSegundoApellidoNuevo.getText());
            docente.setSegundoNombre(panelActualizar.textFieldSegundoNombreNuevo.getText());
            docente.setTelefono(panelActualizar.textFieldTelefonoNuevo.getText());
            docente.setTitulo(panelActualizar.textFieldTituloNuevo.getText());
            //valida los nuevos datos
            new VUsuario(docente);
            //actualiza el usuario docente
            gestorUsuario.actualizarUsuario(cedulaUsuario, docente);
            //si no ocurren excepciones limpia los campos
            limpiarCampos();
            //informa
            JOptionPane.showMessageDialog(panelActualizar, "El Usuario Docente ha sido actualizado con exito", "Actualizar Docente", JOptionPane.PLAIN_MESSAGE);
        } catch (NumberFormatException ex) {
            JOptionPane.showMessageDialog(panelActualizar, "El campo numero de cedula solo debe contener un valor numerico", "Numero Cedula", JOptionPane.ERROR_MESSAGE);
        } catch (VUsuario ex) {
            JOptionPane.showMessageDialog(panelActualizar, ex.getMessage(), "Error en datos", JOptionPane.INFORMATION_MESSAGE);
        }
    }

    private void actualizarEstudiante() {
        try {
            Estudiante estudiante = (Estudiante) usuario;
            int cedulaUsuario = Integer.parseInt(panelActualizar.textFieldCedula.getText());
            //actualiza los atributos del estudiante
            estudiante.setActivo(panelActualizar.checkActivoNuevo.isSelected());
            estudiante.setDireccion(panelActualizar.textFieldDireccionNuevo.getText());
            estudiante.setEmail(panelActualizar.textFieldEmailNuevo.getText());
            estudiante.setIdentificacionUsuario(Integer.parseInt(panelActualizar.textFieldCedulaNueva.getText()));
            estudiante.setPrimerApellido(panelActualizar.textFieldPrimerApellidoNuevo.getText());
            estudiante.setPrimerNombre(panelActualizar.textFieldPrimerNombreNuevo.getText());
            estudiante.setSegundoApellido(panelActualizar.textFieldSegundoApellidoNuevo.getText());
            estudiante.setSegundoNombre(panelActualizar.textFieldSegundoNombreNuevo.getText());
            estudiante.setTelefono(panelActualizar.textFieldTelefonoNuevo.getText());
            estudiante.setCarrera(panelActualizar.textFieldCarreraNuevo.getText());
            estudiante.setUniversidad(panelActualizar.textFieldUniversidadNuevo.getText());
            //valida los nuevos datos
            new VUsuario(estudiante);
            //actualiza el usuario estudiante
            gestorUsuario.actualizarUsuario(cedulaUsuario, estudiante);
            //si no ocurren excepciones limpia los campos
            limpiarCampos();
            //informa
            JOptionPane.showMessageDialog(panelActualizar, "El Usuario Estudiante ha sido actualizado con exito", "Actualizar Estudiante", JOptionPane.PLAIN_MESSAGE);
        } catch (NumberFormatException ex) {
            JOptionPane.showMessageDialog(panelActualizar, "El campo numero de cedula solo debe contener un valor numerico", "Numero Cedula", JOptionPane.ERROR_MESSAGE);
        } catch (VUsuario ex) {
            JOptionPane.showMessageDialog(panelActualizar, ex.getMessage(), "Error en datos", JOptionPane.INFORMATION_MESSAGE);
        }
    }

    private void limpiarCampos() {
        panelActualizar.radioDocente.setSelected(false);
        panelActualizar.radioDocenteNuevo.setSelected(false);
        panelActualizar.radioDocenteNuevo.setEnabled(true);
        panelActualizar.radioEstudiante.setSelected(false);
        panelActualizar.radioEstudianteNuevo.setSelected(false);
        panelActualizar.radioEstudianteNuevo.setEnabled(true);
        panelActualizar.checkActivo.setSelected(false);
        panelActualizar.checkActivoNuevo.setSelected(false);
        panelActualizar.textAreaIntereses.setText("");
        panelActualizar.textAreaInteresesNuevo.setText("");
        panelActualizar.textFieldBuscar.setText("");
        panelActualizar.textFieldCarrera.setText("");
        panelActualizar.textFieldCarreraNuevo.setText("");
        panelActualizar.textFieldCedula.setText("");
        panelActualizar.textFieldCedulaNueva.setText("");
        panelActualizar.textFieldDependencia.setText("");
        panelActualizar.textFieldDependenciaNueva.setText("");
        panelActualizar.textFieldDireccion.setText("");
        panelActualizar.textFieldDireccionNuevo.setText("");
        panelActualizar.textFieldEmail.setText("");
        panelActualizar.textFieldEmailNuevo.setText("");
        panelActualizar.textFieldPrimerApellido.setText("");
        panelActualizar.textFieldPrimerApellidoNuevo.setText("");
        panelActualizar.textFieldPrimerNombre.setText("");
        panelActualizar.textFieldPrimerNombreNuevo.setText("");
        panelActualizar.textFieldSegundoApellido.setText("");
        panelActualizar.textFieldSegundoApellidoNuevo.setText("");
        panelActualizar.textFieldSegundoNombre.setText("");
        panelActualizar.textFieldSegundoNombreNuevo.setText("");
        panelActualizar.textFieldTelefono.setText("");
        panelActualizar.textFieldTelefonoNuevo.setText("");
        panelActualizar.textFieldTitulo.setText("");
        panelActualizar.textFieldTituloNuevo.setText("");
        panelActualizar.textFieldUniversidad.setText("");
        panelActualizar.textFieldUniversidadNuevo.setText("");
    }

    private void mostrarDatosDocente(Docente docente) {
        //muestra los datos actuales
        panelActualizar.textAreaIntereses.setText(docente.getAreasInteres());
        panelActualizar.textFieldCedula.setText(docente.getIdentificacionUsuario()+"");
        panelActualizar.textFieldDependencia.setText(docente.getDependecia());
        panelActualizar.textFieldDireccion.setText(docente.getDireccion());
        panelActualizar.textFieldEmail.setText(docente.getEmail());
        panelActualizar.textFieldPrimerApellido.setText(docente.getPrimerApellido());
        panelActualizar.textFieldPrimerNombre.setText(docente.getPrimerNombre());
        panelActualizar.textFieldSegundoApellido.setText(docente.getSegundoApellido());
        panelActualizar.textFieldSegundoNombre.setText(docente.getSegundoNombre());
        panelActualizar.textFieldTelefono.setText(docente.getTelefono());
        panelActualizar.textFieldTitulo.setText(docente.getTitulo());
        panelActualizar.radioDocente.setSelected(true);
        panelActualizar.checkActivo.setSelected(docente.getActivo());
        //muestra datos acttuales en los campos de datos nuevos
        panelActualizar.textAreaInteresesNuevo.setText(docente.getAreasInteres());
        panelActualizar.textFieldCedulaNueva.setText(docente.getIdentificacionUsuario()+"");
        panelActualizar.textFieldDependenciaNueva.setText(docente.getDependecia());
        panelActualizar.textFieldDireccionNuevo.setText(docente.getDireccion());
        panelActualizar.textFieldEmailNuevo.setText(docente.getEmail());
        panelActualizar.textFieldPrimerApellidoNuevo.setText(docente.getPrimerApellido());
        panelActualizar.textFieldPrimerNombreNuevo.setText(docente.getPrimerNombre());
        panelActualizar.textFieldSegundoApellidoNuevo.setText(docente.getSegundoApellido());
        panelActualizar.textFieldSegundoNombreNuevo.setText(docente.getSegundoNombre());
        panelActualizar.textFieldTelefonoNuevo.setText(docente.getTelefono());
        panelActualizar.textFieldTituloNuevo.setText(docente.getTitulo());
        panelActualizar.radioDocenteNuevo.setSelected(true);
        panelActualizar.checkActivoNuevo.setSelected(docente.getActivo());
        //activa los campos para docente
        panelActualizar.textAreaInteresesNuevo.setEditable(true);
        panelActualizar.textFieldDependenciaNueva.setEditable(true);
        panelActualizar.textFieldTituloNuevo.setEditable(true);
        panelActualizar.radioDocenteNuevo.setEnabled(true);
        //desactiva los campos para estudiante
        panelActualizar.textFieldCarreraNuevo.setEditable(false);
        panelActualizar.textFieldUniversidadNuevo.setEditable(false);
        panelActualizar.radioEstudianteNuevo.setEnabled(false);
    }

    private void mostrarDatosEstudiante(Estudiante estudiante) {
        //muestra los datos actuales
        panelActualizar.textFieldCarrera.setText(estudiante.getCarrera());
        panelActualizar.textFieldCedula.setText(estudiante.getIdentificacionUsuario()+"");
        panelActualizar.textFieldDireccion.setText(estudiante.getDireccion());
        panelActualizar.textFieldEmail.setText(estudiante.getEmail());
        panelActualizar.textFieldPrimerApellido.setText(estudiante.getPrimerApellido());
        panelActualizar.textFieldPrimerNombre.setText(estudiante.getPrimerNombre());
        panelActualizar.textFieldSegundoApellido.setText(estudiante.getSegundoApellido());
        panelActualizar.textFieldSegundoNombre.setText(estudiante.getSegundoNombre());
        panelActualizar.textFieldTelefono.setText(estudiante.getTelefono());
        panelActualizar.textFieldUniversidad.setText(estudiante.getUniversidad());
        panelActualizar.radioEstudiante.setSelected(true);
        panelActualizar.checkActivo.setSelected(estudiante.getActivo());
        //muestra datos acttuales en los campos de datos nuevos
        panelActualizar.textFieldCarreraNuevo.setText(estudiante.getCarrera());
        panelActualizar.textFieldCedulaNueva.setText(estudiante.getIdentificacionUsuario()+"");
        panelActualizar.textFieldDireccionNuevo.setText(estudiante.getDireccion());
        panelActualizar.textFieldEmailNuevo.setText(estudiante.getEmail());
        panelActualizar.textFieldPrimerApellidoNuevo.setText(estudiante.getPrimerApellido());
        panelActualizar.textFieldPrimerNombreNuevo.setText(estudiante.getPrimerNombre());
        panelActualizar.textFieldSegundoApellidoNuevo.setText(estudiante.getSegundoApellido());
        panelActualizar.textFieldSegundoNombreNuevo.setText(estudiante.getSegundoNombre());
        panelActualizar.textFieldTelefonoNuevo.setText(estudiante.getTelefono());
        panelActualizar.textFieldUniversidadNuevo.setText(estudiante.getUniversidad());
        panelActualizar.radioEstudianteNuevo.setSelected(true);
        panelActualizar.checkActivoNuevo.setSelected(estudiante.getActivo());
        //desactiva los campos para docente
        panelActualizar.textAreaInteresesNuevo.setEditable(false);
        panelActualizar.textFieldDependenciaNueva.setEditable(false);
        panelActualizar.textFieldTituloNuevo.setEditable(false);
        panelActualizar.radioDocenteNuevo.setEnabled(false);
        //activa los campos para estudiante
        panelActualizar.textFieldCarreraNuevo.setEditable(true);
        panelActualizar.textFieldUniversidadNuevo.setEditable(true);
        panelActualizar.radioEstudianteNuevo.setEnabled(true);
    }

}
